package com.lifang.framework.beans.factory;

import com.lifang.framework.beans.BeansException;

/**
 * bean 工厂
 */
public interface BeanFactory {

    String FACTORY_BEAN_PREFIX = "&";

    /**
     * 通过beanName 获取bean
     */
    Object getBean(String beanName) throws BeansException;

    /**
     * 通过beanName 和 构造方法参数获取bean
     */
    Object getBean(String beanName, Object... args) throws BeansException;

    /**
     * 通过beanName 和 class 获取指定bean
     */
    <T> T getBean(String beanName, Class<T> requiredType);

    /**
     * 获取指定类型的bean
     * 存在多个相同类型的bean时会抛出BeansException
     */
    <T> T getBean(Class<T> requiredType) throws BeansException;

    /**
     * 通过beanName获取bean的真实类型
     */
    Class<?> getType(String beanName);

    /**
     * 判断bean工厂中是否包名称相同的对象
     */
    boolean containsBean(String beanName);
}
